The invention relates to extending functionality at run-time to computer program objects.
Conventional software applications make use of independent modular software components, sometimes referred to as “plug-ins”. These plug-ins provide extensibility to the functionality of the software application. Typically, when an application initially begins execution, a plug-in capable software application checks for available plug-ins and determines available functionality. In some application programs, checking for plug-ins may be performed dynamically, while the program is running. An example of a conventional software application which makes use of plug-ins is Adobe® Acrobat®.
A disadvantage of plug-ins is that plug-ins typically are independent of one another and do not make use of the program code contained within other plug-ins. Interaction between plug-ins is typically managed at a higher level by the application program. As a result, while a plug-in may make use of functions contained in another plug-in, the plug-in does not include actual program code stored in another plug-in. Similarly, plug-ins are not able to modify or add to the content of one another.
An example of a component programing model is the Microsoft® Component Object Model (“COM”). COM makes use of software components similar to the plug-ins described above. The software components include definitions written in an object-oriented programming (“OOP”) language, such as C++. A software component for COM defines one or more COM classes. Instances of COM classes are COM objects. These COM objects are used to build applications Typically, an application program loads one or more software components containing particular implementations of operations used within the application program. Each of the software components is compiled separately before the application program executes. At run-time the available software components are integrated. Software components in COM follow conventions allowing components to be implemented in different languages, such as C++, Pascal, or LISP. The software components add to the functionality of the application program by defining classes and methods which can in turn be used by the application program. However, like conventional plug-ins, the COM classes defined in the software components cannot modify one another. While one COM class can inherit from another COM class, COM classes are not able to alter other COM classes. As a result, the functionality provided by different COM objects is limited to whatever functionality is provided by the compiled form of the corresponding COM classes. To extend the functionality of a COM object, the software component defining that particular COM object's COM class is typically rewritten and then recompiled. COM is described in many sources, including in Box, Don, “Essential COM”, Addison-Wesley Pub. Co., 1998.